<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>组件话编程</title>
    <script type="text/javascript" src="../../../public/vue.js"></script>
</head>
<body>
<!--

-->
<div id="app">
    <!--
        Vue中使用组件的三大步骤:
        一、定义组件(创建组件)
        二、注册组件
        三、使用组件(写组件标签)
        一、如何定义一个组件?
        使用Vue.extend(options)创建，其中options和new Vue(options)时传入的那个options几乎一样，但也有点区别;
        区别如下:
        1.el不要写，为什么?一最终所有的组件都要经过一个vm的管理，由vm中的el决定服务哪个容器。
        2.data必须写成函数，为什么?-避免组件被复用时，数据存在引用关系。
        备注:使用template可以配置组件结构。
        二、如何注册组件?
        1.局部注册:靠newVue的时候传入components选项
        2.全局注册:靠Vue.component('组件名'，组件)
        三、编写组件标签:
        <school></school>
        -->
    <!--    第三步：使用组件 -->
    <school></school>
    <student></student>
</div>

</body>
<script type="text/javascript">
    // 第一步：创建一个组件
    const school = Vue.extend({
        template: `
          <div>
            <h1>学校名称：{{ name }}</h1>
            <h1>学校地址：{{ address }}</h1>
          </div>
        `,
        data() {
            return {
                name: '尚硅谷',
                address: '北京'
            }
        },
        methods: {
            show() {
                alert(this.name);
            }
        }
    });

    const student = Vue.extend({
        template: `
          <div>
            <h1>姓名：{{ name }}</h1>
            <h1>年龄：{{ age }}</h1>
          </div>
        `,
        data() {
            return {
                name: 'tom',
                age: 18,
                sex: '男'
            }
        }
    });

    Vue.component('hello', hello);
    const hello = Vue.extend({
        template: `
          <div>
            <h1>姓名：{{ name }}</h1>
            <h1>年龄：{{ age }}</h1>
          </div>
        `,
        data() {
            return {
                name: '张三',
                age: 18,
            }
        }
    });

    const vm = new Vue({
        el: '#app',
        // 第二步注入组件（局部注册）
        components: {
            school,
            student
        }
    })


</script>
</html>